package com.csun.cmny.provider.controller;

import com.csun.cmny.core.support.BaseController;
import com.csun.cmny.provider.pojo.CacBaseType;
import com.csun.cmny.provider.service.CacBaseBigItemService;
import com.csun.cmny.provider.service.CacBaseMinorItemService;
import com.csun.cmny.provider.service.CacBaseTypeService;
import com.csun.cmny.util.wrapper.WrapMapper;
import com.csun.cmny.util.wrapper.Wrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/*
 * 评估类别管理——基础类别
 * */
@RestController
@RequestMapping("/CacBaseType")
public class CacBaseTypeController extends BaseController {
    @Autowired
    private CacBaseTypeService cacBaseTypeService;
    @Autowired
    private CacBaseMinorItemService cacBaseMinorItemService;
    @Autowired
    private CacBaseBigItemService cacBaseBigItemService;

    /*
     * 这里的认证和当前登录的用户注解先预留，等完善了再进行修改
     * */
    //添加单个类别
    @RequestMapping(value = "/addCacBaseType", method = RequestMethod.POST)
    public Wrapper<CacBaseType> addCacBaseType(String name) {
        if (name == null) {
            return WrapMapper.wrap(Wrapper.ILLEGAL_ARGUMENT_CODE_, "类别名称不能为空", null);
        }

        CacBaseType cacBaseType = new CacBaseType();
        cacBaseType.setName(name);
        cacBaseType.setGroupId(getLoginAuthDto().getGroupId());//添加组织机构ID

        //根据类别名称判断该类别是否在该机构中已经存在
        CacBaseType cacBaseType1 = cacBaseTypeService.selectByCacType(cacBaseType);
        if (cacBaseType1 != null) {
            return WrapMapper.wrap(Wrapper.ERROR_CODE, "该类别已经存在", null);
        }

        int n = cacBaseTypeService.insert(cacBaseType);
        if (n <= 0) {
            return WrapMapper.wrap(Wrapper.ERROR_CODE, "添加失败", cacBaseType);
        }
        return WrapMapper.wrap(Wrapper.SUCCESS_CODE, "添加成功", cacBaseType);
    }

    //根据id删除单个类别及类别下的大项和大项下的小项
    @RequestMapping(value = "/delCacBaseType", method = RequestMethod.POST)
    public Wrapper delCacBaseType(Integer cacTypeId) {
        if (cacTypeId == null) {
            return WrapMapper.wrap(Wrapper.ILLEGAL_ARGUMENT_CODE_, "类别id不能为空", null);
        }
        CacBaseType cacBaseType = new CacBaseType();
        cacBaseType.setCacTypeId(cacTypeId);
        cacBaseType.setGroupId(getLoginAuthDto().getGroupId());//添加组织机构ID
        //查询该列表
        CacBaseType cacBaseType1 = cacBaseTypeService.selectByCacType(cacBaseType);
        if (cacBaseType1 == null) {
            return WrapMapper.wrap(Wrapper.ERROR_CODE, "没有此id", cacTypeId);
        }
        //删除小项
        int m = cacBaseMinorItemService.delByTypeId(cacTypeId);
        //删除大项
        int b = cacBaseBigItemService.delByTypeId(cacTypeId);
        //删除类别
        int n = cacBaseTypeService.delById(cacTypeId);
        if (n <= 0) {
            return WrapMapper.wrap(Wrapper.ERROR_CODE, "删除失败", n);
        }
        return WrapMapper.wrap(Wrapper.SUCCESS_CODE, "删除成功", n);
    }

    //修改单个类别
    @RequestMapping(value = "/updateCacBaseType", method = RequestMethod.POST)
    public Wrapper<CacBaseType> updateCacBaseType(CacBaseType cacBaseType) {
        if (cacBaseType.getCacTypeId() == null) {
            return WrapMapper.wrap(Wrapper.ILLEGAL_ARGUMENT_CODE_, "类别id不能为空", null);
        }
        if (cacBaseType.getName() == null || cacBaseType.getName().length() <= 0) {
            return WrapMapper.wrap(Wrapper.ILLEGAL_ARGUMENT_CODE_, "类别名称不能为空", null);
        }
        cacBaseType.setGroupId(getLoginAuthDto().getGroupId());//添加组织机构ID
        CacBaseType cacBaseType1 = new CacBaseType();
        cacBaseType1.setName(cacBaseType.getName());
        cacBaseType1.setGroupId(getLoginAuthDto().getGroupId());//添加组织机构ID

        //通过名称判断该类别名称是否已经存在
        CacBaseType cacBaseType2 = cacBaseTypeService.selectByCacType(cacBaseType1);
        if (cacBaseType2 != null && !cacBaseType2.getCacTypeId().equals(cacBaseType.getCacTypeId())) {
            return WrapMapper.wrap(Wrapper.ERROR_CODE, "该名称已经存在", cacBaseType2);
        }

        int n = cacBaseTypeService.update(cacBaseType);
        if (n <= 0) {
            return WrapMapper.wrap(Wrapper.ERROR_CODE, "修改失败", cacBaseType);
        }
        return WrapMapper.wrap(Wrapper.SUCCESS_CODE, "修改成功", cacBaseType);
    }

    //根据类别id查询单个类别
    @RequestMapping(value = "/selectCacBaseTypeById", method = RequestMethod.POST)
    public Wrapper<CacBaseType> selectCacBaseTypeById(Integer cacTypeId) {
        if (cacTypeId == null) {
            return WrapMapper.wrap(Wrapper.ERROR_CODE, "类别id不能为空", null);
        }
        CacBaseType cacBaseType = cacBaseTypeService.selectCacTypeById(cacTypeId);
        if (cacBaseType == null) {
            return WrapMapper.wrap(Wrapper.ERROR_CODE, "没有此id", null);
        }
        return WrapMapper.wrap(Wrapper.SUCCESS_CODE, "查询成功", cacBaseType);
    }

    //根据类别id查询单个类别及类别下的大项及大项下的小项
    @RequestMapping(value = "/selectOneById", method = RequestMethod.POST)
    public Wrapper selectOneById(Integer cacTypeId) {
        if (cacTypeId == null) {
            return WrapMapper.wrap(Wrapper.ILLEGAL_ARGUMENT_CODE_, "类别id不能为空", null);
        }
        CacBaseType cacBaseType = cacBaseTypeService.selectOneById(cacTypeId);
        if (cacBaseType == null) {
            return WrapMapper.wrap(Wrapper.ERROR_CODE, "没有此id", null);
        }
        return WrapMapper.wrap(Wrapper.SUCCESS_CODE, "查询成功", cacBaseType);
    }

    //查询所有类别及类别下的大项及大项下的小项
    @RequestMapping(value = "/selectBaseShowAll", method = RequestMethod.POST)
    public Wrapper selectBaseShowAll() {
        List<CacBaseType> cacBaseTypeList = cacBaseTypeService.selectShowAll(getLoginAuthDto().getGroupId());//根据机构ID查询
        if (CollectionUtils.isEmpty(cacBaseTypeList)) {
            return WrapMapper.wrap(Wrapper.ILLEGAL_ARGUMENT_CODE_, "该机构还未初始化评估", null);
        }
        return WrapMapper.wrap(Wrapper.SUCCESS_CODE, "查询成功", cacBaseTypeList);
    }
}
